<?php
	include_once('clases/Controlador.php');
	
	/**
	 * Controlador que se encarga de la Seguridad de la Aplicacion.
	 * Tiene los metodos de validar usuario, cerrar session, etc.
	 * 
	 * @author Miguel Angel Villanueva Rengifo.
	 * @version 0.1
	 * @package Controladores
	 *
	 */
	class ControladorSeguridad extends Controlador {
		
		/**
		 * Funcion para validar acceso de usuario al sistema. 
		 * El resultado se muestra en formato JSON.
		 * @example $_REQUEST['user_name']:nombre de usuario, $_REQUEST['password']: contrasella
		 *
		 */
		public function ValidarUsuario(){
			
			$respuesta=array();
			$user_name=$_REQUEST['txtuser_name'];
			$password=$_REQUEST['txtpassword'];
			
			if(!empty($user_name) && !empty($password)){
				$usuario=Usuarios::Login($user_name,$password);
				//$cliente=Clientes::VerificarCliente($user_name,$password);
				if(!empty($usuario)){
						if(count($usuario->Personal)>0){
							$_SESSION['tipo_usuario']='a';
							$_SESSION['id_tipo_usuario'] = $usuario->Personal->id_usuario;
						}elseif (count($usuario->Estudiantes)>0){
							$_SESSION['tipo_usuario']='e';
							$_SESSION['id_tipo_usuario'] = $usuario->Estudiantes->id_estudiante;
						}else {
							$_SESSION['tipo_usuario']='ne';
							$_SESSION['id_tipo_usuario'] = $usuario->NoEstudiante->id_no_estudiante;
						}
					
						//$_SESSION['vimagen_usu'] = $usuario->vimagen_usu;
						$_SESSION['user_name'] = $user_name;		
						$_SESSION['id_usu']=$usuario->id_usuario;																						
						
						$respuesta['access']=true;
				}else {
					$respuesta['mensaje']='Usuario o Password incorrectos.';
					$respuesta['access']=false;
				}
			}else {
				$respuesta['mensaje']='El campo usuario o password esta vacio.';
				$respuesta['access']=false;
			}
			
			if($respuesta['access']){
				header("Location: index.php");
			}else{
				
				$view= new View('login.php');				
				$view->setVars('mensaje','Sus datos son incorrectos, porfavor ingrese de nuevo.');
				if(!empty($_REQUEST['t']) && ($_REQUEST['t']=='1' || $_REQUEST['t']=='true'))
					$view->setPlantilla('main');
				$view->Display();
				
				$view= new View('login.php');
				
			}			
		}
		
		/**
		 * Funcion Principal. Esta funcion se carga en caso no se especifique un metodo del Controlador.
		 *
		 */
		public function Index(){
			//ControladorSeguridad::ValidarUsuario();
		}
		
		/**
		 * Destruye la Session del Usuario en la Aplicacion..
		 *
		 */
		public function CerrarSession(){			
			session_unset($_SESSION['user_name']);
			session_unset($_SESSION['tipo_usuario']);
			session_unset($_SESSION['id_tipo_usuario']);
			
			header("Location: index.php");		
		}
		
		/**
		 * Funcion para crear nuevas cuentas de Usuarios o NoUsuarios.
		 *
		 */
		public function RegistrarUsuario(){
			$mensaje='';
			if(!Usuarios::ExisteUsuario(trim($_REQUEST['txtuser_name'])) && !ControladorSeguridad::ExisteCorreo($_REQUEST['txtcorreo'])){
				$tipo_persona = $_REQUEST['tipo_persona'];
				
				$usuario=new Usuarios();
				$estudiante = new Estudiantes();
				$no_estudiante = new NoEstudiante();
				$personal = new Personal();
				
				$usuario->user_name = trim($_REQUEST['txtuser_name']);
				$usuario->password = trim($_REQUEST['txtpassword']);
				
				//$usuario->uuser_name = 
								
				//$cliente->nid_usu = $objusuario->nid_usu;
				$usuario->nombres = utf8_decode($_REQUEST['txtnombre']);
				$usuario->apellidos = utf8_decode($_REQUEST['txtapellido']);
				$usuario->direccion = utf8_decode($_REQUEST['txtdireccion']);
				$usuario->correo = $_REQUEST['txtcorreo'];
				$usuario->sexo = $_REQUEST['sexo_persona'];
				$usuario->telefono = $_REQUEST['txttelefono'];
				$usuario->fecha_nacimiento = $_REQUEST['txtnacimiento'];
				
				if($tipo_persona=='0'){
					$estudiante->id_centro_estudios = $_REQUEST['centro_estudios'];
					$estudiante->id_carrera = $_REQUEST['carrera'];
					$estudiante->ciclo = $_REQUEST['ciclo'];
					$estudiante->cod_estudiante = $_REQUEST['txtcod_estudiante'];
					
					$usuario->Estudiantes[]=$estudiante;
				}elseif ($tipo_persona=='1'){
					$no_estudiante->dni=Util::LimpiarEspacios($_REQUEST['txtdni']);
					$no_estudiante->ocupacion=Util::LimpiarEspacios($_REQUEST['txtocupacion']);
					
					$usuario->NoEstudiante[] = $no_estudiante;
				}else {
					$personal->cargo = Util::LimpiarEspacios($_REQUEST['cargo']);
					
					$usuario->Personal[] = $personal;
				}
				
				if(!$usuario->save())
					$mensaje='Su cuenta se ha creado satisfactoriamente, <b>ahora puede Iniciar session.</b>';
				else 
					$mensaje='No se pudo crear su cuenta de usuario, vuelva a intentar';
			}else {
				if(ControladorSeguridad::ExisteCorreo($_REQUEST['txtcorreo'])){
					$mensaje='La direccion de Correo('.$_REQUEST['txtcorreo'].') ya fue registrado anteriormente, ingrese otra direccion';
				}else {
					$mensaje='El nombre de usuario ya existe, ingrese otro nombre de usuario.';
				}
			}
			
			if(!empty($_REQUEST['modo']) && $_REQUEST['modo']=='admin'){
				include_once('controladores/ControladorUsuarios.php');
				
				if($tipo_persona=='0')
					ControladorUsuarios::Estudiantes();
				elseif ($tipo_persona=='1')
					ControladorUsuarios::NoEstudiantes();
				else 
					ControladorUsuarios::Personal();
			}else {
				include_once('controladores/ControladorInstituto.php');
			
				ControladorInstituto::Login($mensaje);
			}		
		}

		/**
		* Metodo para recuperar la clave de un Cliente.
		*
		*/
		public function RecuperarClave(){
			//$objcliente = new Clientes();
			//echo $_REQUEST['txtvrsptasecreta_cli'];			
			//die("stop");
			
			$filaclave = Clientes::getClientePorCorreo($_REQUEST['txtvnombreusuario_usu'], $_REQUEST['txtvrsptasecreta_cli']);	
			
			if(!empty($filaclave)){
				$mensaje = "En buena hora, sus datos de <strong>Inicio de sesión</strong> son: <br>";
				$mensaje2 = "";
			}else{ 
				$mensaje2 =  "Sus datos son incorrectos";
				$mensaje = "";
			}
			
			$view = new View('recuperarclave.php');
			$view->AddJavaScript('validacionform.js');
			$view->setvars('filaclave',$filaclave);
			$view->setvars('mensaje',$mensaje);
			$view->setvars('mensaje2',$mensaje2);
			$view->setPlantilla('main');
			$view->Display();			
		}
		
		/**
		 * Verifica la existencia de correo relacion con un Usuario.
		 *
		 * @param string $correo Direccion de correo.
		 * @return boolean
		 */
		public function ExisteCorreo($correo){
			$usuario = Usuarios::getUsuarioPorCorreo($correo);
			if(!empty($usuario))
				return true;
			else 
				return false;
		}	
	}
?>